package cn.ecommerce.course.module.users.dal.dataobject.jwt;

import lombok.Data;

import java.util.Date;

/**
 * JWT令牌解析结果实体类
 * 作用：替代Map存储从JWT中解析出的所有数据，提供类型安全的getter方法
 * 优势：避免直接使用字符串Key导致的拼写错误，代码可读性和可维护性更高
 */
@Data // Lombok注解：自动生成getter、setter、toString等方法
public class JwtPayload {
    /**
     * 自定义业务字段：用户ID
     * 对应JWT生成时存入payload的"userId"字段
     * 类型为Long，与数据库中用户ID类型保持一致
     */
    private Long userId;

    /**
     * 自定义业务字段：用户名
     * 对应JWT生成时存入payload的"username"字段
     * 类型为String，用于展示或简单业务判断
     */
    private String username;

    /**
     * JWT标准声明：令牌签发时间
     * 对应JWT规范中的"iat"（issued at）字段
     * 类型为Date，记录令牌何时被创建
     */
    private Date issuedAt;

    /**
     * JWT标准声明：令牌过期时间
     * 对应JWT规范中的"exp"（expires at）字段
     * 类型为Date，记录令牌何时失效
     */
    private Date expiresAt;

    /**
     * 可根据业务需求扩展其他字段
     * 例如：
     * private String role; // 用户角色
     * private String permissions; // 权限列表
     * private String clientIp; // 签发时的客户端IP
     */
}
